import { NextResponse } from 'next/server';
import { cookies } from 'next/headers';
import { verifyToken } from '@/app/lib/auth';
import { callErnieBot } from '@/app/lib/ernie';

interface FoodResult {
  name: string;
  calories: number | string;
  protein: number | string;
  carbs: number | string;
  fat: number | string;
  [key: string]: any;
}

export async function GET(request: Request) {
  try {
    const { searchParams } = new URL(request.url);
    const query = searchParams.get('q');

    if (!query) {
      return NextResponse.json(
        { message: '请输入搜索关键词' },
        { status: 400 }
      );
    }

    const prompt = `
      请提供以下食物的详细营养信息，直接返回 JSON 格式数据（不要包含任何其他内容）：
      食物名称：${query}

      {
        "results": [
          {
            "name": "食物名称",
            "category": "食物类别",
            "servingSize": "标准份量",
            "calories": 数值,
            "protein": 数值,
            "carbs": 数值,
            "fat": 数值,
            "fiber": 数值,
            "vitamins": {
              "维生素A": 数值,
              "维生素C": 数值
            },
            "minerals": {
              "钙": 数值,
              "铁": 数值
            },
            "description": "食物描述"
          }
        ]
      }

      注意：
      1. 所有营养成分必须是数值，不要带单位
      2. 直接返回 JSON，不要包含 markdown 标记
      3. 确保返回的是合法的 JSON 格式
    `;

    const aiResponse = await callErnieBot(prompt);
    let nutritionData;

    try {
      // 清理响应文本，移除可能的代码块标记
      const cleanedResponse = aiResponse
        .replace(/^```json\s*/, '')  // 移除开头的 ```json
        .replace(/```$/, '')         // 移除结尾的 ```
        .trim();

      // 尝试解析 JSON
      nutritionData = JSON.parse(cleanedResponse);

      // 确保数据格式正确
      if (!nutritionData.results || !Array.isArray(nutritionData.results)) {
        throw new Error('返回数据格式不正确');
      }

      // 处理数值中可能包含的单位
      nutritionData.results = nutritionData.results.map((food: FoodResult) => ({
        ...food,
        calories: parseFloat(String(food.calories).replace(/[^0-9.]/g, '')),
        protein: parseFloat(String(food.protein).replace(/[^0-9.]/g, '')),
        carbs: parseFloat(String(food.carbs).replace(/[^0-9.]/g, '')),
        fat: parseFloat(String(food.fat).replace(/[^0-9.]/g, '')),
        fiber: parseFloat(String(food.fiber).replace(/[^0-9.]/g, '')),
        vitamins: Object.fromEntries(
          Object.entries(food.vitamins).map(([key, value]) => [
            key,
            parseFloat(String(value).replace(/[^0-9.]/g, ''))
          ])
        ),
        minerals: Object.fromEntries(
          Object.entries(food.minerals).map(([key, value]) => [
            key,
            parseFloat(String(value).replace(/[^0-9.]/g, ''))
          ])
        ),
      }));

    } catch (error) {
      console.error('解析AI响应失败:', error);
      console.error('AI原始响应:', aiResponse);
      
      // 返回一个默认的营养信息作为备选
      nutritionData = {
        results: [{
          name: query,
          category: "未知",
          servingSize: "100克",
          calories: 0,
          protein: 0,
          carbs: 0,
          fat: 0,
          fiber: 0,
          vitamins: {
            "维生素A": 0,
            "维生素C": 0
          },
          minerals: {
            "钙": 0,
            "铁": 0
          },
          description: "暂无详细营养信息"
        }]
      };
    }

    return NextResponse.json(nutritionData);
  } catch (error) {
    console.error('搜索营养信息错误:', error);
    return NextResponse.json(
      { message: '搜索失败，请稍后重试' },
      { status: 500 }
    );
  }
} 